package repository

import (
	"gitee.com/fierce_wolf/go-fox-edge-common/commUtil/Map"
	"gitee.com/fierce_wolf/go-fox-edge-common/commUtil/OS"
	"gitee.com/fierce_wolf/go-fox-edge-common/commUtil/periodTask"
	"go-fox-edge-kernel-manager/utils/ProcessUtils"
)

type RepoLocalProcessStartTask struct {
	ModelType string
}

func (e *RepoLocalProcessStartTask) TaskType() periodTask.TaskType {
	return periodTask.TaskOnce
}

func (e *RepoLocalProcessStartTask) SchedulePeriod() int64 {
	return 10
}

func (e *RepoLocalProcessStartTask) Execute() {
	// windows版本没有主动拉起JAVA进程的操作
	if OS.Type.IsWindows() {
		return
	}

	// 从磁盘中查找所有的shell文件信息
	confFileInfoList := LocalAppConf.GetConfFileInfoList()

	// 过滤掉指定的项目
	confFileInfoList, err := LocalAppConf.FilterAppConfFile(confFileInfoList)
	if err != nil {
		return
	}

	// 扩展数据库中的启动配置信息
	LocalAppLoad.ExtendStartConfig(confFileInfoList)

	// 扩展相关的进程状态信息
	ProcessUtils.ExtendAppStatus(confFileInfoList)

	for _, confFileInfo := range confFileInfoList {
		appName := Map.GetString(confFileInfo, "appName", "")
		appType := Map.GetString(confFileInfo, "appType", "")
		appLoad := Map.GetBool(confFileInfo, "appLoad", false)
		pid := Map.GetInt64(confFileInfo, "pid", 0)

		e.firstStartProcess(appName, appType, appLoad, pid)
	}

}

func (e *RepoLocalProcessStartTask) firstStartProcess(appName, appType string, appLoad bool, pid int64) {
	// kernel类型的进程，通过配置linux下的startup.sh来启动，service才是由manage进程来拉起
	if appType == "kernel" {
		return
	}

	// 配置为启动
	if !appLoad {
		return
	}

	// 检查：是否已经启动
	if pid != 0 {
		return
	}

	// 启动进程
	LocalAppStart.RestartProcess(appName, appType)
}
